﻿#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
  Админка
"""

__author__ = 'frozzzen@gmail.com (Alexey Malashin)'

import logging
from engine import settings
from engine import pagegen
from engine import backup
from engine.data import news
from engine.data import cites
from engine.data import pages
from engine.data import feedback
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import memcache

# enable info logging by the app
logging.getLogger().setLevel(logging.INFO)

class AdminHandler(webapp.RequestHandler):
  """Класс страницы администрирования
  """

  def get(self, category):
    """По методу GET забираем страницу администрирования и раздел
    Args:
      self: класс страницы
      category: раздел администрирования
    """

    if category == '/':
      category = ''
    category = '/admin' + category
    
    page_template_values = {                                              # устанавливаем параметры шаблона
      'portal_title': 'Режим администрирования ' + settings.SITETITLE,    # заголовок
      'form_action': category                                             # по какому адресу отправлять форму
    }

    # выбираем категорию - что будем выводить
    if category == '/admin/news':
      page_template_values.update(news = news.GetNews(False))
    elif category == '/admin/cite':
      page_template_values.update(cites = cites.GetCites(False))
    elif category == '/admin/pages':
      page_template_values.update(pages = pages.GetPages())
    elif category == '/admin/feedback':
      page_template_values.update(msgs = feedback.GetMsgs())
    elif category == '/admin/cache':
      is_flush = self.request.get('flush')
      if is_flush == 'True':
        memcache.flush_all()
      page_template_values.update(cache = memcache.get_stats())
            
    pagegen.generatePage(self, category, page_template_values)


  def post(self, category):
    """По методу POST забираем форму администрирования
    Args:
      self: класс страницы
      category: раздел администрирования
    """

    if category == '/news':           # работаем с новостями
      action = self.request.get('action')
      if action == 'add':             # добавляем новость
        news.AddNews(self.request.get('news'))
      elif action == 'delete':        # удаляем помеченные новости
        news.DelNews(self.request.get('existentnews', allow_multiple = True))
        logging.info('Admin: deleting news!')

    elif category == '/cite':         # работаем с цитатами
      action = self.request.get('action')
      if action == 'add':             # добавляем цитату
        cites.AddCite(self.request.get('citeText'), self.request.get('citeAuthor'))
      elif action == 'delete':        # удаляем помеченные цитаты
        cites.DelCites(self.request.get('existentcite', allow_multiple = True))
        logging.info('Admin: deleting cites')

    elif category == '/pages':        # работаем со страницами
      action = self.request.get('action')
      if action == 'add':             # добавляем новую страницу
        page = {'url' : self.request.get('pageURL'), 
                'title' : self.request.get('pageTitle'), 
                'description' : self.request.get('pageDescription'), 
                'content' : self.request.get('pageContent')}
        pages.AddPage(page)
      elif action == 'delete':        # удаляем помеченную страницу
        pages.DelPage(self.request.get('existentpage', allow_multiple = True))
        logging.info('Admin: deleting pages')

    elif category == '/feedback':     # работаем с сообщениями от пользователей
      action = self.request.get('action')
      if action == 'delete':          # удаляем помеченные сообщения
        feedback.DelMsg(self.request.get('existentmsg', allow_multiple = True))
        logging.info('Admin: deleting messages')

    category = '/admin' + category    # перенаправляем на ту же страницу
    self.redirect(category)

application = webapp.WSGIApplication([('/admin/backup', backup.BackupHandler), ('/admin(.*)', AdminHandler)], debug = settings.DEBUG)

def main():
  run_wsgi_app(application)
if __name__ == "__main__":
  main()